package com.qf.myschool.dao.impl;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.qf.myschool.dao.IStudentDao;
import com.qf.myschool.entity.Student;
import com.qf.myschool.tool.PageTool;
import com.qf.myschool.vo.LoginUserVo;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 对学生表作curd操作的数据访问实现类
 * @author sx
 * @version 2020年2月28日
 */
public class StudentDAOImpl implements IStudentDao {
	/**
	*声明DBUtils工具类的执行对象,将数据库连接池作为参数,c3p0数据库连接池
	*/
	public QueryRunner qr=new QueryRunner(new ComboPooledDataSource());

	/**
	 * 注册学生信息
	 * @param stu1
	 * @return int
	 */
	public int register(Student stu1){
		//声明一个变量存结果
		int result =0;
		try {
			//准备sql语句
			String sql = "insert into t_student(name,PASSWORD,sex,email,hobby,city) values(?,?,?,?,?,?)";
			//调用DBUtils工具类中方法
			result = qr.update(sql, stu1.getName(), stu1.getPassword(), stu1.getSex(), stu1.getEmail(), stu1.getHobby(), stu1.getCity());
		}catch (Exception e){
			e.printStackTrace();
		}
		return result;
	}

	public int login(LoginUserVo u1) {
		//声明一个变量存登录结果
		int result=0;
		try {
			//准备sql语句
			String sql="select count(name) as num from t_student where name=? and PASSWORD=?";
			//调用DBUtils工具类中方法
			Map<String,Object> resultMap=qr.query(sql,new MapHandler(),u1.getName(),u1.getPassword());
			result=Integer.valueOf(resultMap.get("num").toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 根据用户名修改密码
	 * @param name
	 * @param newPwd
	 * @return int
	 */
	public int modifyPwd(String name, String newPwd) {
		//声明一个变量存结果
		int result=0;
		try {
			//准备sql语句
			String sql="update t_student set PASSWORD=? where name=?";
			//调用jdbc工具类中方法
			result=qr.update(sql, newPwd,name);
		}catch (Exception e){
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 根据用户名查询用户信息
	 * @param uname
	 * @return
	 */
	public Student queryStudentByUname(String uname) {
		//声明一个学生对象
		Student s1=null;
		try {
			//准备sql语句
			String sql="select name,PASSWORD,sex,email,hobby,city from t_student where name=?";
			//调用jdbc工具类中方法
			s1=qr.query(sql,new BeanHandler<>(Student.class),uname);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return s1;
	}

	/**
	 * 根据用户名修改用户信息
	 * @param stu1
	 * @return int
	 */
	public int modifyStudent(Student stu1) {
		//声明一个变量存结果
		int result=0;
		try{
			//准备sql语句
			String sql="update t_student set sex=?,email=?,hobby=?,city=? where name=?";
			//调用jdbc工具类中方法
			result=qr.update(sql, stu1.getSex(),stu1.getEmail(),stu1.getHobby(),stu1.getCity(),stu1.getName());
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}

	/**
	 *总记录数
	 *@return Integer
	 */
	@Override
	public Integer queryTotalCount() {
		//声明一个变量存结果
		int result=0;
		try{
			//准备sql语句
			String sql="select count(name) as total from t_student";
			//调用dbutils工具类中方法
			Map<String,Object> resultMap=qr.query(sql,new MapHandler());
			result=Integer.valueOf(resultMap.get("total").toString());
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 分页查询所有的学生信息
	 * @return
	 */
	public List<Student> queryStudent(PageTool p1) {
		//声明一个集合存学生信息
		List<Student> stus=new ArrayList<>();
		try {
			//准备sql语句
			String sql="select name,PASSWORD,sex,email,hobby,city from t_student limit ?,? ";
			//调用DBUtils工具类中方法
			stus=qr.query(sql,new BeanListHandler<>(Student.class),p1.getStart(),p1.getPageCount());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return stus;
	}

	/**
	 * 根据用户名删除学生信息的方法
	 * @param uname
	 * @return int
	 */
	public int delStudentByName(String uname) {
		//声明一个变量存结果
		int result=0;
		try{
			//准备sql语句
			String sql="delete from t_student where name=?";
			//调用jdbc工具类中方法
			result=qr.update(sql, uname);
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}

}
